package com.date;

import java.util.Calendar;
import java.util.Date;

/**
 * @Description: Java Calender类使用
 */
public class CalenderDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(); // 如果不设置时间，则默认为当前时间

        calendar.setTime(new Date()); // 将系统当前时间赋值给 Calendar 对象
        System.out.println("现在时刻：" + calendar.getTime()); // 获取当前时间

        int year = calendar.get(Calendar.YEAR); // 获取当前年份
        System.out.println("现在是" + year + "年");

        int month = calendar.get(Calendar.MONTH) + 1; // 获取当前月份（月份从 0 开始，所以加 1）
        System.out.print(month + "月");

        int day = calendar.get(Calendar.DATE); // 获取日
        System.out.print(day + "日");

        int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 获取今天星期几（以星期日为第一天）
        System.out.print("星期" + week + " ");

        int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时数（24 小时制）
        System.out.print(hour + "时");

        int minute = calendar.get(Calendar.MINUTE); // 获取当前分钟
        System.out.print(minute + "分");

        int second = calendar.get(Calendar.SECOND); // 获取当前秒数
        System.out.print(second + "秒");

        int millisecond = calendar.get(Calendar.MILLISECOND); // 获取毫秒数
        System.out.print(millisecond + "毫秒");

        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
        System.out.println("今天是本月的第 " + dayOfMonth + " 天");

        int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); // 获取今天是本月第几周
        System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");

        int many = calendar.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
        System.out.println("今天是今年第 " + many + " 天");

        Calendar c = Calendar.getInstance();
        c.set(2021, 1, 1); // 设置年月日，时分秒将默认采用当前值
        System.out.println("设置日期为 2021-1-1 后的时间：" + c.getTime()); // 输出时间

        //输出日历
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(2020, 4, 1); // 实际的calendar对象所表示的日期为2016年6月1日
        // 判断2016年6月1日为一周中的第几天
        int index = calendar2.get(Calendar.DAY_OF_WEEK)-2;
        char[] title = { '一', '二', '三', '四', '五', '六', '日' }; // 存放曰历的头部
        int daysArray[][] = new int[6][7];// 存放日历的数据
        int daysInMonth = 31; // 该月的天数
        int day1 = 1; // 自动增长
        for (int i = index; i < 7; i++) {
            // 填充第一周的日期数据，即日历中的第一行
            daysArray[0][i] = day1++;
        }
        for (int i = 1; i < 6; i++) {
            // 填充其他周的日历数据，控制行
            for (int j = 0; j < 7; j++) {
                // 如果当前day表示的是本月最后一天，则停止向数组中继续赋值
                if (day1 > daysInMonth) {
                    i = 6;
                    break;
                }
                daysArray[i][j] = day1++;
            }
        }
        System.out.println("----------------------日 历------------------------\n");
        System.out.println("------------------2020 年 5 月--------------------\n");
        for (int i = 0; i < title.length; i++) {
            System.out.print(title[i] + "\t");
        }
        System.out.print("\n");
        // 输出二元数组daysArray中的元素
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                if (daysArray[i][j] == 0) {
                    if (i != 0) {
                        // 如果到月末，则完成显示日历的任务，停止该方法的执行
                        return;
                    }
                    System.out.print("\t");
                    continue;
                }
                System.out.print(daysArray[i][j] + "\t");
            }
            System.out.print("\n");
        }
    }
}
